package utils;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class NetWorkUtil {

    /**
     * 从网络Url中下载文件
     * @param urlStr
     * @param fileName
     * @param savePath
     * @throws IOException
     */

    public static void downLoadFromUrl(String fileName, String urlStr, String savePath) throws IOException{

        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //设置超时间为3秒
        conn.setConnectTimeout(3*1000);
        //防止屏蔽程序抓取而返回403错误
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //得到输入流
        InputStream inputStream = conn.getInputStream();
        //获取自己数组
        byte[] getData = readInputStream(inputStream);

        //文件保存位置
        File saveDir = new File(savePath);
        if(!saveDir.exists()){
            saveDir.mkdir();
        }
        File file = new File(saveDir+File.separator+fileName);
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(getData);
        fos.close();
        inputStream.close();

        System.out.println("info:"+url+" download success");

    }

    /**
     * 从输入流中获取字节数组
     * @param inputStream
     * @return
     * @throws IOException
     */

    public static byte[] readInputStream(InputStream inputStream) throws IOException {

        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();

    }

    /**
     * 从网络Url返回值中获取内容
     * @param urlStr
     * @throws IOException
     */

    public static List<String> getLinesFromUrl(String urlStr) throws IOException {

        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //设置超时间为3秒
        conn.setConnectTimeout(3*1000);
        //防止屏蔽程序抓取而返回403错误
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //得到输入流
        InputStream inputStream = conn.getInputStream();
        BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(inputStream));
        List<String> folderNameList = new ArrayList<>();
        int i = 0;
        while (true) {
            String line = stdoutReader.readLine();
            if (line == null){
                break;
            }
//            System.out.println(line);
            if (line.contains("编队中包含")){
                i = 3;
                continue;
            }
            if(i==1){
                line = line.replace("</p>", "");
                if (line.contains("span")){
                    line = line.replace("</span>", "");
                    line = line.substring(line.lastIndexOf(">")+1);
                }
                folderNameList.add(line.replace("</p>", ""));
//                System.out.println(line.replace("</p>", ""));
                i = 0;
            }
            if(i==2){
                folderNameList.add(line.replace("<th>", "").replace("</th>", ""));
//                System.out.println(line.replace("<th>", "").replace("</th>", ""));
                i = 0;
            }

            if(line.contains("sm-audio-src")){
                if (i==3){
                    i = 0;
                    continue;
                }else {
                    line = line.replace("</a></div>", "");
                    String[] cache = line.split(">");
                    folderNameList.add(cache[cache.length-1]);
//                    System.out.println(cache[cache.length-1]);
                    i = 0;
                }
            }
            if(line.contains("ship_word_line")){
                i = 1;
            }
            if(line.contains("<tr data-key=\"")){
                i = 2;
            }
            if (line.contains("TbPn-shwrpn-") && line.contains("</span></li>")){
                line = line.replace("</span></li>", "");
                line = line.substring(line.lastIndexOf(">")+1);
                folderNameList.add(line);
//                System.out.println(line);
            }
        }
        inputStream.close();
//        CommonUtil.sortStrList(folderNameList);

        return folderNameList;

    }

    public static List<String> getShipsFromUrl(String urlStr) throws IOException {

        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //设置超时间为3秒
        conn.setConnectTimeout(3*1000);
        //防止屏蔽程序抓取而返回403错误
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //得到输入流
        InputStream inputStream = conn.getInputStream();
        BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(inputStream));
        List<String> nameList = new ArrayList<>();
        while (true) {
            String line = stdoutReader.readLine();
            if (line == null){
                break;
            }
            if (line.contains("头像.jpg")){
                String[] cache = line.split("title=\"");
                for (String str : cache){
                    String result = str.substring(0,str.indexOf("\">"));
                    if (!result.contains("<")){
                        nameList.add(result);
                    }
                }
            }
        }
        inputStream.close();
//        CommonUtil.sortStrList(folderNameList);
        CommonUtil.removeDuplicate(nameList);
        return nameList;

    }

}
